<?php


namespace App\HttpController;


use EasySwoole\Http\AbstractInterface\AbstractRouter;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use FastRoute\RouteCollector;

class Router extends AbstractRouter
{
    function initialize(RouteCollector $routeCollector)
    {
        /*
          * eg path : /router/index.html  ; /router/ ;  /router
         */
        $routeCollector->get('/router','/test');
        $routeCollector->get('/user1', '/User/user1');
        $routeCollector->get('/', function (Request $request, Response $response) {
            $response->write('this router index');
        });
        $routeCollector->get('/test', function (Request $request, Response $response) {
            $response->write('this router test.');
            return '/child';// 重新定位匹配执行 App\HttpController\Index 类的 child 方法
        });
//        $routeCollector->get('/user/{id:\d+}', function (Request $request, Response $response) {
//            $response->write(json_encode([
//                'get' => $request->getQueryParams(),
//                'post' => $request->getParsedBody(),
//                // 在这里可以获取 id 参数
//                'context' => ContextManager::getInstance()->get(Router::PARSE_PARAMS_CONTEXT_KEY)
//            ]));
//            return false;// 不再往下请求,结束此次响应
//        });
//
//
        $routeCollector->addGroup('/api', function (\FastRoute\RouteCollector $collector) {
            // 访问 http://localhost:9501/admin/test?version=x 将匹配如下路由，并且进行再次匹配执行
            $collector->addRoute('GET', '/api', function (\EasySwoole\Http\Request $request, \EasySwoole\Http\Response $response) {
                $version = $request->getQueryParam('version');
                // 这里可以根据 version 参数判断返回新路径
                if ($version == 1) {
                    // http://localhost:9501/admin/test?version=1 将匹配路由 "/V1/admin/test"
                    // 即执行对应的 App\HttpController\V1\Admin.php 类的 test() 方法
                    $path = '/V1' . $request->getUri()->getPath(); // "/V1/admin/test"
                }
                // 返回新的构造的path
                return $request->getUri()->getPath();
            });
        });


        // 注意：http://localhost:9501/admins/index?version=x 不能匹配到下面这个 action 路由配置参数
        // 需要单独配置路由，如下所示：即执行对应的 App\HttpController\V1\Admins.php 类的 index() 方法
        // $collector->addRoute('GET', '/admins/index', '/V1/Admin/index');
        $routeCollector->addGroup('/admin', function (\FastRoute\RouteCollector $collector) {
            // 访问 http://localhost:9501/admins/test?version=x 将匹配如下路由，并且进行再次匹配执行
            $collector->addRoute('GET', '/{action}', function (\EasySwoole\Http\Request $request, Response $response) {
                $version = $request->getQueryParam('version');
                // 这里可以根据 version 参数判断返回新路径
                if ($version == 1) {
                    // http://localhost:9501/admins/test?version=1 将匹配路由 "/V1/admins/test"
                    // 即执行对应的 App\HttpController\V1\Admins.php 类的 test() 方法
                    $path = '/V1' . $request->getUri()->getPath(); // "/V1/admins/test"
                }
                // 返回新的构造的path
                return $request->getUri()->getPath();
            });
        });




        /*
         * eg path : /closure/index.html  ; /closure/ ;  /closure
         */
        $routeCollector->get('/closure',function (Request $request,Response $response){
            $response->write('this is closure router');
            //不再进入控制器解析
            return false;
        });
    }
}